/*******************************************************************************
 * Copyright (c) 2011-11-10 @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a>.
 * All rights reserved.
 *
 * Contributors:
 *     <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> - initial API and implementation
 ******************************************************************************/
package com.redhat.auth.ejb;

import java.util.List;

import com.dayatang.querychannel.support.Page;
import com.redhat.auth.ejb.vo.RoleVO;

/**
 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
 * @since 2011-11-10
 */
public interface RoleApplication {
	/**
	 * 根据ID查询role对象
	 * @param id
	 * @return
	 */
	RoleVO getRoleById(Long id);

	/**
	 * 创建一个角色
	 * @param role
	 * @return
	 */
	RoleVO createRole(RoleVO role);

	/**
	 * 更新一个角色
	 * @param role {name,status,description}
	 * @return
	 */
	RoleVO updateRole(RoleVO role);

	/**
	 * 删除一个角色对象
	 * @param id
	 */
	void deleteRoleById(Long id);

	/**
	 * 分页查询角色列表
	 * @param search {name, status}
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	List<RoleVO> queryAllByPage(RoleVO search, int currentPage, int pageSize);

	/**
	 * 统计匹配记录数
	 * @param search {name,status}
	 * @return
	 */
	Long getCount(RoleVO search);

	/**
	 * 按功能实体funIds集合给角色id进行权限分配
	 * @param currentRole
	 * @param funIds
	 * @return
	 */
	void setPermissions(Long id, Long[] funIds);

	/**
	 * 按功能实体funIds集合给角色id进行权限分配
	 * @param currentRole
	 * @param funIds
	 * @return
	 */
	void removePermissions(Long id, Long[] funIds);

	/**
	 * 按功能实体funIds集合给角色id进行权限分配
	 * @param currentRole
	 * @param funIds
	 */
	void addPermissions(Long id, Long[] funIds);

	/**
	 * 状态设置
	 * @param role
	 * @param status @see RoleVO.STATUS_DISABLED, @see RoleVO.STATUS_DISABLED
	 */
	void changeStatus(Long id, int roleStatus);

	/**
	 * 分页查询角色
	 * @param vo {name}
	 * @param currentPage
	 * @param pageSize
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-16
	 */
	public Page<RoleVO> pageQueryRole(RoleVO vo, int currentPage, int pageSize);

	/**
	 * 查询角色
	 * @param vo {name}
	 * @return
	 * @author <a href="mailto:iffiff1@hotmail.com">Tyler Chen</a> 
	 * @since 2011-11-16
	 */
	public List<RoleVO> queryRole(RoleVO vo);
}
